Phase 5.IV.A — the $_SERVER["MOBILE"] branch triage

All 108 branch sites. Every arrangement site is now a media query: the column-hides and simple markup swaps in A.2, and the mixed structural forms in A.3 (uniform cell markup that stacks on narrow with stack-narrow). Content and logic sites stay PHP; the viewport meta is IV.B and the last body-class IV.C.

Totals: arrangement 43 (converted), content 38, logic 24, viewport 2, mobile-class 1 — 108 sites.

arrangement — converted to a media query (A.2 + A.3 done) (43)

?:101converted in A.2
?:108converted in A.2
?:129converted in A.2
?:93colspan count for a spacer row
?:115A.3: uniform row markup + stack-narrow
?:144A.3: uniform row markup + stack-narrow
?:147A.3: constant colspan, spacer hidden narrow
?:163A.3: spacer cell always emitted, hidden narrow
?:109A.3: one row per string, stacks on narrow via stack-narrow
?:107converted in A.2
?:104converted in A.2
?:159converted in A.2
?:488converted in A.2
?:60colspan count for a spacer row
?:104converted in A.2
?:122converted in A.2
?:81colspan count for a spacer row
?:109converted in A.2
?:378A.3: user cell stays inline, stacks on narrow
?:436converted in A.2
?:471converted in A.2
?:508converted in A.2
?:715converted in A.2
?:96converted in A.2
?:102converted in A.2
?:128converted in A.2
?:72colspan count for a spacer row
?:143converted in A.2
?:122converted in A.2
?:141converted in A.2
?:79colspan count for a spacer row
src/views/elements/MixcrawlsElement.php:80colspan count for a spacer row
?:357converted in A.2
?:165converted in A.2
?:166converted in A.2
?:81A.3: uniform cell markup, stacks on narrow via stack-narrow
?:82A.3: uniform centered cell, stacks on narrow
?:295colspan count for a spacer row
?:325converted in A.2
?:378converted in A.2
?:2191converted in A.2
?:2733converted in A.2
?:2796converted in A.2

content → stays PHP (38)

src/views/elements/AdminbarElement.php:63swaps to LOGO_SMALL resource
src/views/elements/AdminmenuElement.php:71swaps to LOGO_SMALL resource
?:117wordwraps the description text
src/models/GroupModel.php:5951title truncation length (emits a shorter string)
src/views/elements/GroupbarElement.php:59swaps to LOGO_SMALL resource
src/views/elements/GroupfeedElement.php:587omits the thread-expand query block
src/views/elements/GroupfeedElement.php:80omits the side-ad script block
?:130name-truncate stretch (shorter string)
?:496omits the ad-preview panel on mobile
?:445name-truncate stretch (emits a shorter string)
src/views/elements/ManagerolesElement.php:114name-truncate stretch (emits a shorter string)
?:134name-truncate stretch (emits a shorter string)
src/views/elements/MixcrawlsElement.php:112variable-length FRAGMENTS list kept in PHP
src/views/elements/MixcrawlsElement.php:99definition header matches its PHP-omitted data cell (112)
src/views/helpers/OptionsHelper.php:174dropdown word-wrap length (emits a shorter string)
src/views/helpers/OptionsHelper.php:67dropdown word-wrap length (emits a shorter string)
src/views/helpers/PaginationHelper.php:186a -- gap marker vs the full numbered page-list loop (different content)
src/views/RecoverView.php:58swaps to LOGO_SMALL resource
src/views/RegisterView.php:81swaps to LOGO_SMALL resource
src/views/ResendEmailView.php:58swaps to LOGO_SMALL resource
src/controllers/SearchController.php:875picks chart pixel width/height for a rendered image
src/views/elements/SearchElement.php:118omits the search-stats <h2> block
src/views/elements/SearchElement.php:271omits the word-cloud block
src/views/elements/SearchElement.php:526swaps to LOGO_MEDIUM resource
src/views/elements/SearchbarElement.php:60swaps to LOGO_SMALL resource
src/views/elements/SideadvertisementElement.php:51omits the side-ad script block
src/views/SigninView.php:182swaps to LOGO_SMALL resource
src/views/SigninView.php:66swaps to LOGO_SMALL resource
src/controllers/components/SocialComponent.php:1012picks chart pixel width/height + tick font for a rendered image
src/controllers/components/SocialComponent.php:9531picks chart pixel width/height for a rendered image
src/controllers/StaticController.php:192picks chart pixel width/height for a rendered image
src/views/StaticView.php:109omits the side-ad script block
src/views/StaticView.php:72swaps to LOGO_SMALL resource
src/views/SuggestView.php:59swaps to LOGO_SMALL resource
src/views/TestsView.php:64swaps to LOGO_SMALL resource
src/views/helpers/VideosHelper.php:105title truncation length (emits a shorter string)
src/views/elements/WelcomemenuElement.php:62swaps to LOGO_SMALL resource
src/views/elements/WikiElement.php:216name-wrap length (emits a shorter string)

logic → stays PHP (24)

src/views/AdminView.php:61addContainer region placement (view assembly)
src/views/AdminView.php:66addContainer region placement
src/views/elements/GroupfeedElement.php:1044$clear feeds a <script> block, not markup
src/views/helpers/GrouplistHelper.php:64reads flag into $is_mobile for use below
src/views/elements/HelpElement.php:50reads flag into $mobile for use below (see its uses)
src/views/helpers/HelpbuttonHelper.php:91flag to a JS 'true'/'false' string for a script
src/views/elements/ManageaccountElement.php:173reads flag into $is_mobile for use below
src/views/elements/ManageaccountElement.php:61reads flag into $is_mobile for use below
?:253adds onkeyup preview hook on desktop
?:255adds onkeyup preview hook on desktop
src/views/helpers/PaginationHelper.php:77early-returns (skips micro pagination) on mobile
src/views/helpers/PagingtableHelper.php:69calls a different table-controls method
src/views/elements/SearchElement.php:435links-per-row modulus controls the row-break loop
src/views/SearchView.php:64addContainer region placement
src/views/SearchView.php:70addContainer region placement
src/controllers/components/SocialComponent.php:3958mail feature gated off on mobile (behavior)
src/controllers/components/SocialComponent.php:7421passes the flag into $data for a view
src/controllers/components/StoreComponent.php:614adds preview() JS calls on desktop
src/views/elements/TrendingElement.php:214terms-per-row controls row grouping loop (emits different structure)
src/views/elements/TrendingElement.php:221number of random trends sliced (emits fewer items)
src/views/layouts/WebLayout.php:293maps the flag to the body's 'mobile' class string
src/index.php:61sets $_SERVER['MOBILE'] from the request; the flag's origin
src/index.php:63sets the flag false; flag plumbing
src/index.php:66sets the flag false; flag plumbing

viewport meta → IV.B (2)

src/library/VersionFunctions.php:594upgrade page's own viewport meta; IV.B territory
src/views/layouts/WebLayout.php:100emits the viewport meta only on mobile; IV.B makes it always

the .mobile body class → IV.C (1)

src/library/VersionFunctions.php:600the .mobile body class is IV.C's to retire